home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / LIBRARY / PAS_0793 / FADINOUT.PAS < prev    next >
Pascal/Delphi Source File  |  1993-08-01  |  3KB  |  139 lines

  1. {─ Fido Pascal Conference ────────────────────────────────────────────── PASCAL ─
  2. Msg  : 359 of 375
  3. From : Jacob Riff                          2:231/411.0          29 Jun 93  07:40
  4. To   : Ronen Magid                         2:403/138.0
  5. Subj : Fade in/Fade out
  6. ────────────────────────────────────────────────────────────────────────────────
  7. Well, well, well isn't that Ronen!
  8.  
  9. Sunday June 27 1993 03:14, Ronen Magid wrote to All:
  10.  
  11.  RM> I'm looking for a small procedure to perform a 'pallete fade out' and then
  12.  RM> (after i re-write the screen text) a fade in.}
  13.  
  14. uses
  15.   crt;
  16. type
  17.   RGBcolors= array[0..47] of byte;
  18. var
  19.   RGBoriginal,RGBnuller: RGBcolors;
  20.   n: integer;
  21.  
  22. procedure GetDAC(var RGBvalues);assembler;
  23. asm
  24.   mov bl,0
  25.   les di,RGBvalues
  26.  @Loop:
  27.   push bx
  28.   mov ax,1007h
  29.   int 10h
  30.   mov bl,bh
  31.   mov bh,0
  32.   mov ax,1015h
  33.   int 10h
  34.   mov es:[di],dh
  35.   mov es:[di+1],ch
  36.   mov es:[di+2],cl
  37.   add di,3
  38.   pop bx
  39.   inc bl
  40.   cmp bl,10h
  41.   jnz @Loop
  42. end;
  43.  
  44. procedure Fade(RGBvalues:RGBcolors; Speed: shortint);
  45. var
  46.   PaletteRegs: array[0..16] of byte;
  47.   Original,TotalChange,NextValues: RGBcolors;
  48. begin
  49. asm
  50.   mov bl,0
  51.   mov di,0
  52.   mov si,0
  53.  @LoopInit:
  54.   push bx
  55.   mov ax,1007h
  56.   int 10h
  57.   mov byte ptr PaletteRegs[si],bh
  58.   inc si
  59.   mov bl,bh
  60.   mov bh,0
  61.   mov ax,1015h
  62.   int 10h
  63.   mov byte ptr Original[di],dh
  64.   mov al,byte ptr RGBvalues[di]
  65.   sub al,dh
  66.   mov byte ptr TotalChange[di],al
  67.   mov byte ptr Original[di+1],ch
  68.   mov al,byte ptr RGBvalues[di+1]
  69.   sub al,ch
  70.   mov byte ptr TotalChange[di+1],al
  71.   mov byte ptr Original[di+2],cl
  72.   mov al,byte ptr RGBvalues[di+2]
  73.   sub al,cl
  74.   mov byte ptr TotalChange[di+2],al
  75.   add di,3
  76.   pop bx
  77.   inc bl
  78.   cmp bl,10h
  79.   jnz @LoopInit
  80.   mov bl,Speed
  81.   mov bh,0
  82.  @LoopSpeed:
  83.   inc bh
  84.   mov di,0
  85.   mov cx,48
  86.  @LoopUdregn:
  87.   mov al,bh
  88.   imul byte ptr TotalChange[di]
  89.   idiv bl
  90.   add al,byte ptr Original[di]
  91.   mov byte ptr NextValues[di],al
  92.   inc di
  93.   loop @LoopUdregn
  94.   mov  dx,3dah
  95.  @LoopWait1:
  96.   in al,dx
  97.   test al,8
  98.   jnz @LoopWait1
  99.  @LoopWait2:
  100.   in al,dx
  101.   test al,8
  102.   jz @LoopWait2
  103.   mov cx,16
  104.   mov di,0
  105.   mov si,0
  106. @LoopOutput:
  107.   mov al,byte ptr PaletteRegs[di]
  108.   inc di
  109.   mov dx,3c8h
  110.   out dx,al
  111.   inc dx
  112.   mov al,byte ptr NextValues[si]
  113.   out dx,al
  114.   mov al,byte ptr NextValues[si+1]
  115.   out dx,al
  116.   mov al,byte ptr NextValues[si+2]
  117.   out dx,al
  118.   add si,3
  119.   loop @LoopOutput
  120.   cmp bh,bl
  121.   jnz @LoopSpeed
  122. end;
  123. end;
  124.  
  125. begin
  126.   GetDAC(RGBoriginal);
  127.   for n:=0 to 47 do RGBnuller[n]:=0;
  128.  
  129.   repeat
  130.     Fade( RGBnuller, 127 );
  131.     for n:=0 to 1999 do begin
  132.       mem[$b800:n+n]:=random(256);
  133.       mem[$b800:n+n+1]:=random(16);
  134.     end;
  135.     Fade( RGBoriginal , 127 );
  136.  
  137.   until KeyPressed;
  138.   ClrScr;
  139. end.